方差var、协方差cov、协方差矩阵 |
您所在的位置:网站首页 › cov 概率 › 方差var、协方差cov、协方差矩阵 |
看完了三个概念之后,我们对三个概念有了一定了解(最起码公式要好好看看吧
下面,我们来进入正题,说说matlab中的方差函数var 还有 协方差函数cov ,对于这两个函数,当然我们可以通过 matlab中help两下解决,但无奈对于英语是心有余而力不足 好了,忠诚的小鸟们,开始上课: 这节咱们讲的是matlab中的方差函数var的用法及具体分析 , var 是用来求方差的,但是首先我们应该清楚的区分两个概念,即方差和样本方差的无偏估计,简要来说(你要是不想简要,详细细内容可以看上一篇
OK!正题! 函数名称: var
函数功能:求解方差
函数用法:var(X) %与var(X,0)相同 var(X,W) var(X,W,dim)
注:var(X,W) % W可以取0或1,取0求样本方差的无偏估计值(除以N-1;对应取1求得的是方差(除以N), W也可以是向量,但必须与X中的第一个维度数相同,即length(W)= size(X,1) 所以还存在: var(X ,0 ,dim) % 除以N dim =1 对每列操作 dim = 2 对每行操作 var(X ,1 ,dim) % 除以N-1 dim =1 对每列操作 dim = 2 对每行操作
var(X,W,dim) % 关于W取向量时,把W看做X中观察值发生的次数(或者说概率也行)
下面详细介绍秘籍: .........................................................对于X是向量时,把向量中每个元素看做一个样本var(X)或者var(X,0)函数输出这个向量中元素的样本方差的无偏估计值,var(X,1)输出的是样本方差 例1: >> a = [1 6 1 4];>> aa = var(a) aa = 6 >> a_var = var(a,1) a_var = 4.5000 >> (sum((a-mean(a)).^2))/(length(a)) ans = 4.5000 ............................................................ 对于X是矩阵时 把每行看做一个观察值,每列看做一个变量,函数输出一个行向量,每个元素计算的是该列的方差 例2: >> X= [1 6 6;4 2 5;7 2 3] X = 1 6 6 4 2 5 7 2 3 >> XX=var(X) XX = 9.0000 5.3333 2.3333 >> (sum((X-repmat(mean(X),3,1)).^2))/(size(X,1)-1) %验证 ans = 9.0000 5.3333 2.3333 >> X_var = var(X,1) X_var = 6.0000 3.5556 1.5556>> (sum((X-repmat(mean(X),3,1)).^2))/(size(X,1)) %验证 ans = 6.0000 3.5556 1.5556——————————————————————————————对于var(X ,0 ,dim) 或者 var(X ,1 ,dim) 前面已说 0 对应 除以N-1; 1对应除以N; dim 指维度信息,默认为1,dim =1 就指对每列操作; dim =2 就指对每行操作。
下面以 var(X ,0 ,dim) 为例进行试验验证: 参考结果:默认为1情况↑(往上看) >> var(X ,0 ,2) ans = 8.3333 2.3333 7.0000 >> Y = X';>> var(Y) ans = 8.3333 2.3333 7.0000 (一样吧) ............................................................... 对于 var(X,W)、var(X,W,dim) 中W为向量的情况: 把W看做X中对应观察值发生的次数(或者说概率也行)处理,为了清除,现粘贴matlab部分源代码(笔者好心已加注释)如下: function y = var(x,w,dim) % The weighted variance for a vector X is defined as%% VAR(X,W) = SUM(W.*RESID.*CONJ(RESID)) / SUM(W)%% where now RESID is computed using a weighted mean. wresize = ones(1,max(ndims(x),dim)); wresize(dim) = n; w = reshape(w ./ sum(w), wresize); % w 看做是x中每个观察值的出现次数,这样w ./ sum(w)即使每个观察样本出现的概率, x0 = bsxfun(@times, w, x); %根据这个概率权重求出期望值或者平均值sum(x0, dim) x = bsxfun(@minus, x, sum(x0, dim)); %where now RESID is computed using a weighted mean. 这儿就是那个RESID y = sum(bsxfun(@times, w, abs(x).^2), dim); 逐行验证: >> clear>> x= [1 6 6;4 2 5;7 2 3] x = 1 6 6 4 2 5 7 2 3 >> w = [1 2 3];>> dim = 1 ;>> n = size(x ,dim) n = 3 >> wresize = ones(1,max(ndims(x),dim)) wresize = 1 1 >> wresize(dim) = n wresize = 3 1 >> w = reshape(w ./ sum(w), wresize) w = 0.1667 0.3333 0.5000 >> x0 = bsxfun(@times, w, x) x0 = 0.1667 1.0000 1.0000 1.3333 0.6667 1.6667 3.5000 1.0000 1.5000 >> x = bsxfun(@minus, x, sum(x0, dim));>> y = sum(bsxfun(@times, w, abs(x).^2), dim) y = 5.0000 2.2222 1.4722 >> var (x,w) %验证下成果 ans = 5.0000 2.2222 1.4722 你要是还感觉晕的话( >> X= [1 6 6;4 2 5;7 2 3];>> a = X(:,1); %取出第一列>> b = w ./ sum(w); %求出概率矩阵>> a0=a.*b; >> a1=sum(a0); %求出第一列在W概率加权下的平均值>> a2=a -a1;>> c = w.*(a2.^2) %W看做是每个观察值的出现次数,求出在此加权下的方差>> sum(c) ans = 5 注意: 需要注意的是,这种情况下求出的是样本的统计方差(也就是除以N的那种,因为式中w ./ sum(w)),并非样本方差无偏估计值 当然对于var(X,W,dim)中dim=1(对每列求方差)dim=2(对每行求方差)也可以进行验证,由于方式基本与之前的相同,在此不再赘述 废话不多说,这节都是干货 我们继续讲第二个函数cov,需要区分的还是两个概念:协方差和样本协方差无偏估计值,此部分参考了博客相关内容http://blog.csdn.net/raocong2010/article/details/5941602,如图:
好了,开工! 函数名称:cov 函数功能: 求协方差矩阵 函数用法: cov(X) % cov(X,0) = cov(X) cov(X,Y) % X,Y必须是各维数都相同的矩阵 cov(X,1) % 除以N而不是N-1 cov(X,Y,1) % 除以N而不是N-1
详细描述:......................................................................if X is a vector向量,cov(X)输出的是这个向量的方差 例: >> A = [4 1 3];>> AA = cov(A) AA = 2.3333 >> a = mean(A) a = 2.6667 >> AAA = 1/3*((4-a)^2+(1-a)^2+(3-a)^2) AAA = 1.5556 >> AAAA= 1/2*((4-a)^2+(1-a)^2+(3-a)^2) %同样,这个方差不是真正意义的方差,而是对样本统计方差的一个无偏估计值 AAAA = 2.3333.............................................................................. 对于矩阵: 详细内容http://blog.csdn.net/raocong2010/article/details/5941602 For matrices, where each row is an observation, and each column is a variable, cov(X) is the covariance matrix. 对于矩阵来说,matlab把每行看做一个观察值,把每列当做一个变量,也就是说对于一个4*3的矩阵求协方差矩阵,matlab会认为存在三个变量,即会求出一个3*3的协方差矩阵其中,对角线元素为对应变量的方差无偏估计值,其他位置为对应变量间的 协方差无偏估计值(即除的是N-1) 但是需要注意的事,matlab在计算相关矩阵时,虽然把每一列的数作为一个随机变量的样本,但每一行必须作为一个这几个随机变量的联合样本即第i个随机变量取第k行的样本值时,第j个随机变量也取第k行的样本值。知道了这一点,我们就可以用协方差的公式代入来计算协方差矩阵了。 下面是一段算法的实现代码:clc; clear all; M = 5 N = 3; % 生成一个M*N的随机原始矩阵 OriginMatrix = rand( M, N ); % 使用自带的cov函数计算相关矩阵 CovMatrix = cov( OriginMatrix ); MeanArray = mean( OriginMatrix ); MeanMatrix = ones( M, 1 ) * MeanArray; % 得到每列减去每列均值的的矩阵 OriginSubMean = OriginMatrix - MeanMatrix; % 计算出相关矩阵 if M == 1 CovMatrixComputed = OriginSubMean' * OriginSubMean / M; else CovMatrixComputed = OriginSubMean' * OriginSubMean / ( M-1 ); end .......................................................................例1:>> X = [1 5 6; 4 3 9 ; 4 2 9; 4 7 2] X = 1 5 6 4 3 9 4 2 9 4 7 2 >> Y = cov(X) Y = 2.2500 -0.7500 0.5000 -0.7500 4.9167 -7.1667 0.5000 -7.1667 11.0000 为探究过程,以Y(1,1)和Y(1,2)为例进行验证 >> x=X(:,1);>> sum((x-3.25).^2)/3 ans = 2.2500 >> y = X (:,2); >> aa = x'*y/3 %需要注意的是,每行看做一个观察值,每列看做一个变量,也就是说,每行显示的是联合观察值,加入对于第一个变量我们取1 ,那么第二个变量就肯定取5,第三个变量就肯定是6 aa = -0.7500 ...................................................... 对于cov(X,Y) X、Y必须是各维数都相等的矩阵,其功能是把X中所有元素看做一个变量的样本,Y中所有元素看做另外一个变量的样本,把矩阵中每个对应位置看做一个联合观察值 函数实现的是求出两个变量的协方差矩阵 例2: >> X X = 1 5 6 4 3 9 4 2 9 4 7 2>> Y = [1 6 7; 7 5 9 ; 1 6 4 ; 2 9 2] Y = 1 6 7 7 5 9 1 6 4 2 9 2>> cov(X,Y) ans = 6.9697 4.4242 4.4242 8.4470 现在用(1,1)和(1,2)位置验证 >> sum(sum((X-mean(mean(X))).^2))/11 %把X中每个元素都看做一个变量的样本,求其方差的无偏估计值 ans = 6.9697 >> sum(sum((X-mean(mean(X))).*(Y-mean(mean(Y)))))/11 %把X、Y矩阵对应位置元素看做一个联合样本,根据公式E[(X-EX)*(Y-EY)]求协方差 ans = 4.4242 ..................................................................................... cov(X,1) 和 cov(X,Y,1) 与之前的求解过程一致,不同的是,其求出的是协方差,而不是样本的协方差无偏估计值,即其除以的是N 而不是N-1 例3: >> cov(X,1) ans = 1.6875 -0.5625 0.3750 -0.5625 3.6875 -5.3750 0.3750 -5.3750 8.2500 >> x=X(:,1);sum((x-3.25).^2)/4 %不同之处 ans = 1.6875 >> y = X (:,2);>> y = y - 4.25;>> aa = x'*y/4 %不同之处 aa = -0.5625 例4: X = 1 5 6 4 3 9 4 2 9 4 7 2>> Y = [1 6 7; 7 5 9 ; 1 6 4 ; 2 9 2] Y = 1 6 7 7 5 9 1 6 4 2 9 2 >> cov(X,Y) ans = 6.9697 4.4242 4.4242 8.4470 >> a =cov(X,Y,1) a = 6.3889 4.0556 4.0556 7.7431 >> a.*12/11 %看出来了吧 ans = 6.9697 4.4242 4.4242 8.4470 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |